const db = require('../db/index')
const bcrypt = require('bcryptjs')
const jwt = require("jsonwebtoken")
const config = require("../config.js")
// 导入处理路径的 path 核心模块
const path = require('path')
const fs = require('fs')
exports.getcontractList = (req, res) => {
    let pageNum = req.body.pageNum;
    let pageSize = req.body.pageSize;

    const sql = "select * from files" + ` limit ${(pageNum - 1) * pageSize} ,${pageSize}`;
    db.query(sql, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err);
        const sql1 = "select count(*) as total from files";
        db.query(sql1, (err, results1) => {
            // 执行 SQL 语句失败
            if (err) return res.cc(err);
            res.send({
                // 状态
                status: 0,
                // 状态描述，判断 err 是 错误对象 还是 字符串
                message: '查询成功',
                data: {
                    list: results,
                    total: results1[0].total
                }
            })

        })
    })

}

exports.uploadFiles = (req, res) => {
    // 手动判断是否上传了文章封面
    if (!req.file || req.file.fieldname !== 'files') return res.cc('文件必选参数！')
    const sql = `insert into files set ? `;
    let imageUrl = path.join('/files', req.file.filename)
    let upload_time = new Date().toLocaleString();
    let data = {
        file_name: req.file.filename,
        file_url: imageUrl,
        file_size: req.file.size,
        upload_person: req.body.upload_person,
        upload_time,
    }
    // 执行 SQL 语句
    db.query(sql, data, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.cc('文件上传失败！')
        res.send({
            // 状态
            status: 0,
            message: '文件上传成功',
            data: path.join('/uploads', req.file.filename)
        })
    })
}


exports.deleteContract = (req, res) => {
    let filePath = path.join(__dirname, '../public/' + req.body.file_url)
    const sql = `delete from files where id =?`;
    // 执行 SQL 语句
    db.query(sql, req.body.id, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.cc('文件删除失败！')

        fs.unlink(filePath, (error) => {
            if (error) return res.cc(error)
            res.send({ status: 0, message: '文件删除成功' })
        })
    })
}

exports.downloadFiles = (req, res) => {
    let sql = "select * from files where id=?";
    db.query(sql, req.body.id, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是查询到数据条数不等于 1
        if (results.length !== 1) return res.cc('下载失败！');
        let download_number = results[0].download_number * 1 + 1;
        const sql = `update files set download_number =? where id =?`;
        // 执行 SQL 语句
        db.query(sql, [download_number, req.body.id], (err, results1) => {
            // 执行 SQL 语句失败
            if (err) return res.cc(err)
            // 执行 SQL 语句成功，但是影响行数不等于 1
            if (results1.affectedRows !== 1) return res.cc('下载失败！')
            //获取文件路径
            let filePath = path.join(__dirname, '../public/' + results[0].file_url)
            res.download(filePath)
        })
    })
}

exports.updateDownloadNumber = (req, res) => {
    let download_number = req.body.download_number * 1 + 1;
    const sql = `update files set download_number =? where id =?`;
    // 执行 SQL 语句
    db.query(sql, [download_number, req.body.id], (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.cc('更新下载次数失败！')
        res.send({ status: 0, message: '更新下载次数成功' })
    })
}
